export type FetchReqOptionsType = {
  url: string | URL | Request,
  jsonParse?: boolean,
  config?: RequestInit
}

/**
 * 使用 fetch 发送请求
 *
 * @param {FetchReqOptionsType} options 请求配置选项
 * - url: 请求地址
 * - jsonParse: 是否对响应数据进行 JSON 解析，默认为 `true`
 * - config: fetch 初始化配置对象，默认值为 `{}`
 * @returns {Promise<any>} 请求响应结果
 */
export const req = async (options: FetchReqOptionsType): Promise<any> => {
  const {url, jsonParse, config} = {
    jsonParse: true,
    config: {},
    ...options
  }
  const res = fetch(url, config)
  if (jsonParse) return res
    .then(response => response.json())
    .catch(error => Promise.reject(error))
  else return res
    .then(response => response.text())
    .catch(error => Promise.reject(error))
}

export type FetchReqType = typeof req
